var nodeCheckedSilent = false;
var nodeUncheckedSilent = false;
var perTreeData=[];
$(document).ready(function(){
	$(window).resize(function() {
	    $('#option-user-table').bootstrapTable('resetView', {
	        height: $(window).height() - 100
	    });
	});
	// 查询
	$("#search-button").click(function () {
        $('#option-user-table').bootstrapTable(('refresh')); // 很重要的一步，刷新url！
    })
    
    // 表单验证
    $('#form_data').bootstrapValidator({
      // 默认的提示消息
      message: 'This value is not valid',
      // 表单框里右侧的icon
      feedbackIcons: {
        　　　　　　　　valid: 'glyphicon glyphicon-ok',
        　　　　　　　　invalid: 'glyphicon glyphicon-remove',
        　　　　　　　　validating: 'glyphicon glyphicon-refresh'
      },
      submitHandler: function (validator, form, submitButton) {
        // 表单提交成功时会调用此方法
        // validator: 表单验证实例对象
        // form jq对象 指定表单对象
        // submitButton jq对象 指定提交按钮的对象
      },
      fields: {
        name: {
          message: '角色名验证失败',
          validators: {
            notEmpty: {
              message: '角色名不能为空'
            },
          }
        }
      }
    });
    
	$('#addRoleModal').on('hide.bs.modal', function () {
		$("#id").val('');
		$("#name").val('');
		$("#desc").val('');
		$("#form_data").data("bootstrapValidator").resetForm();
    });
	getPermission();
	getRoles();
});

function getPermission() {
	$.ajax({
		type :"GET",
		url : "/sys/per?t="+new Date().getTime(),
		data: null,
		dataType:"json",
		headers: {"Content-Type": "application/json;charset=utf-8"},
		success : function(data) {	
			if(data){
				if(data.httpCode==200){
					perTreeData = data.data;
					initTreeView(perTreeData);
				}else{
					layer.msg(data.msg, {icon:2,time: 2000});
				}
			}
		},error: function(request) {
			layer.msg("获取权限失败！", {icon:2,time: 2000});
        }
	});
}

function initTreeView(data){
	$('#permissionTree').treeview({
		data:data,
		highlightSelected: true,// 选中项不高亮，避免和上述制定的颜色变化规则冲突
        multiSelect: false,// 不允许多选，因为我们要通过check框来控制
        showCheckbox: true,// 展示checkbox
        highlightSearchResults: true, // 高亮查询结果
        levels: 5, // 展开级别 Default: 2
        searchResultBackColor: '#CCC', // 查找背景
        showIcon: false,
        onNodeChecked: function(event, node) {    // 选中时触发
        	if(nodeCheckedSilent){
                return;
            }
            nodeCheckedSilent = true;
            checkAllParent(node);
            checkAllSon(node);
            nodeCheckedSilent = false;
         },
         onNodeUnchecked: function (event, node) {  // 取消选中时触发
        	 if(nodeUncheckedSilent)
        	        return;
        	    nodeUncheckedSilent = true;
        	    uncheckAllParent(node);
        	    uncheckAllSon(node);
        	    nodeUncheckedSilent = false;
         },
	});
}


// 选中全部父节点
function checkAllParent(node){
    $('#permissionTree').treeview('checkNode',node.nodeId,{silent:true});
    var parentNode = $('#permissionTree').treeview('getParent',node.nodeId);
    if(!("nodeId" in parentNode)){
        return;
    }else{
        checkAllParent(parentNode);
    }
}
// 取消全部父节点
function uncheckAllParent(node){
    $('#permissionTree').treeview('uncheckNode',node.nodeId,{silent:true});
    var siblings = $('#permissionTree').treeview('getSiblings', node.nodeId);
    var parentNode = $('#permissionTree').treeview('getParent',node.nodeId);
    if(!("nodeId" in parentNode)) {
        return;
    }
    var isAllUnchecked = true;  // 是否全部没选中
    for(var i in siblings){
        if(siblings[i].state.checked){
            isAllUnchecked=false;
            break;
        }
    }
    if(isAllUnchecked){
        uncheckAllParent(parentNode);
    }
 
}
 
// 级联选中所有子节点
function checkAllSon(node){
    $('#permissionTree').treeview('checkNode',node.nodeId,{silent:true});
    if(node.nodes!=null&&node.nodes.length>0){
        for(var i in node.nodes){
            checkAllSon(node.nodes[i]);
        }
    }
}
// 级联取消所有子节点
function uncheckAllSon(node){
    $('#permissionTree').treeview('uncheckNode',node.nodeId,{silent:true});
    if(node.nodes!=null&&node.nodes.length>0){
        for(var i in node.nodes){
            uncheckAllSon(node.nodes[i]);
        }
    }
}


function getRoles(){
	$('#option-user-table').bootstrapTable({
		height: $(window).height() - 100,
		method: 'get',
		url:'/sys/roles',
		contentType:'application/json;charset=utf-8',
		striped : true, // 是否显示行间隔色
		cache: false, // 是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
		pageNumber : 1, // 初始化加载第一页
        pagination : true,// 是否分页
        locale: "zh-CN",
// sortable: true, //是否启用排序
// sortOrder: "asc", //排序方式
        pageSize : 10,// 单页记录数
        pageList : [10,20,50,100],// 可选择单页记录数
        showRefresh : false,// 刷新按钮
        uniqueId : "id", // 每一行的唯一标识，一般为主键列
        cardView : false, // 是否显示详细视图
		detailView : false, // 是否显示父子表
		resizable : false,
		sidePagination : "server", // 分页方式：client客户端分页，server服务端分页（*）
		queryParamsType : "",
        queryParams : function(params) {// 上传服务器的参数
            var temp = {
            	pageSize : params.pageSize, // 每页显示数量
            	pageNum : params.pageNumber, // SQL语句起始索引
                searchContent: $("#inputkeyword").val(),// 按条件搜索
            };
            return temp;
        },
        responseHandler: function (res) {
            return{                            // return
												// bootstrap-table能处理的数据格式
                "total":res.iTotalRecords,
                "rows":res.data
            }
        },
        columns : [
            {
				field : 'id',
				title : 'ID',
				visible: false
			},
			{
				field : 'name',
				title : '角色名称',
				width : 150,
				align: 'center',
				// sortable : true
			},
			{
				field : 'permissionNames',
				title : '权限',
				width : 400,
				align: 'center',
				// sortable : true
			},
			{
				field : 'desc',
				title : '备注',
				width : 200,
				align: 'center',
				// sortable : true
			},
			{
				field : 'createTime',
				title : '创建时间',
				width : 200,
				align: 'center',
				// sortable : true
			},
			/*{
				field : 'operate',
				title : '操作',
				width : 150,
				align : 'center',
				formatter:function(value, row, index) {
				    return [
				        "<a name='option-user-table-modfiy' onclick='showEditModal("+JSON.stringify(row)+")'>修改</a>",
				        "<a name='option-user-table-modfiy' onclick='showAuthorizeModal("+JSON.stringify(row)+")'>授权</a>",
				        '<a name="option-user-table-delete" onclick="showDelModal(\''+row.id+'\',\''+row.name+'\')">删除</a>'
				    ].join('');
				}
			}*/
        ]
	});
}
function add(){
	$("#myModalLabel").text("新增角色");
	$("#addRoleModal").modal('show');
}
function showEditModal(row){
	$("#myModalLabel").text("编辑角色");
	$("#id").val(row.id);
	$("#name").val(row.name);
	$("#desc").val(row.desc);
	$("#addRoleModal").modal('show');
}

function showDelModal(id,name){
	$("#deleteHint").text("您确认要删除"+name+"角色吗？");
	$("#deleteHaulId").val(id);
	$("#delModal").modal('show');
}
function confirmDel(){
	var id = $("#deleteHaulId").val();
	$.ajax({
		type :"DELETE",
		url : "/sys/roles/"+id,
		data: null,
		dataType:"json",
		headers: {"Content-Type": "application/json;charset=utf-8"},
		success : function(data) {	
			if(data){
				if(data.httpCode==200){
					layer.msg("删除成功", {icon:1,time: 2000});
					$('#delModal').modal('hide');
					$('#option-user-table').bootstrapTable(('refresh'));
				}else{
					layer.msg(data.msg, {icon:2,time: 2000});
				}
			}
		},error: function(request) {
			layer.msg("删除失败！", {icon:2,time: 2000});
        }
	});
}


function showAuthorizeModal(row){
	$("#roleId").val(row.id);
	$("#roleName").val(row.name);
	traverse(perTreeData,row.permissionIds);
	initTreeView(perTreeData);
	$("#authorizeModal").modal('show');
}

function traverse(arr,menuIdList) {
    for (var a in arr) {
    	arr[a]['state'] = {checked:false};
	     for(var i in menuIdList){
	    	if(arr[a].id == menuIdList[i]){
			     arr[a]['state'] = {checked:true};
			     menuIdList.splice(i,1);
			     break;
	     	}
	     }
	     if (typeof(arr[a].nodes) == "object") {
	    	 traverse(arr[a].nodes,menuIdList); // 递归遍历
	     }
    }
}

function save(){
	$("#form_data").bootstrapValidator('validate');// 提交验证
	if($('#form_data').data('bootstrapValidator').isValid()){
		var form_data = $('#form_data').serializeArray();
		var obj = {};
		$.each(form_data,function(i,v){
			obj[v.name] = v.value;
		})    
		console.log(JSON.stringify(obj));
		var type = "add";
		if(obj.id){
			type = "edit";
		}
		$.ajax({
			type :type=="edit"?"PUT":"POST",
			url : "/sys/roles",
			data: JSON.stringify(obj),
			dataType:"json",
			headers: {"Content-Type": "application/json;charset=utf-8"},
			success : function(data) {	
				if(data){
					if(data.httpCode==200){
						layer.msg(type=="edit"?"编辑角色成功":"添加角色成功", {icon:1,time: 2000});
						$('#addRoleModal').modal('hide');
						$('#option-user-table').bootstrapTable(('refresh'));
					}else{
						layer.msg(data.msg, {icon:2,time: 2000});
					}
				}
			},error: function(request) {
				layer.msg(type=="edit"?"编辑角色失败！":"添加角色失败！", {icon:2,time: 2000});
	        }
		});
	}
	return false;
}

function savePer(){
	var roleId = $("#roleId").val();
	var permission = $('#permissionTree').treeview('getChecked');
	console.log(permission);
	if(permission && permission.length>0){
		var permissionids = [];
		permission.forEach(function(item){  
			console.log(item);
			permissionids.push(item.id);
		});
		var obj = {
			id:roleId,
			permissionIds:permissionids
		};
		console.log(JSON.stringify(obj));
		$.ajax({
			type :"POST",
			url : "/sys/roles/per",
			data: JSON.stringify(obj),
			dataType:"json",
			headers: {"Content-Type": "application/json;charset=utf-8"},
			success : function(data) {	
				if(data){
					if(data.httpCode==200){
						layer.msg("授权成功", {icon:1,time: 2000});
						$('#authorizeModal').modal('hide');
						$('#option-user-table').bootstrapTable(('refresh'));
					}else{
						layer.msg(data.msg, {icon:2,time: 2000});
					}
				}
			},error: function(request) {
				layer.msg("授权失败！", {icon:2,time: 2000});
	        }
		});
	}else{
		layer.msg("请勾选权限！", {icon:2,time: 2000});
	}
	return false;
}